// src/main.rs

mod lexer;
mod tokens;

use lexer::Lexer;

use crate::tokens::TokenType;

fn main() {
//     let source_code = r#"
// // 这是一个单行注释
// var count = 123; /* 这是一个
// 多行注释，可以跨越多行 */
// var greeting = "Hello, world!";
// /*
//  * 这是另一个多行注释
//  * 带有星号装饰
//  */
// if (count >= 0100) {
//     print "That's a big number!";
// }
//     // 各种数字格式测试
// var decimal = 123;        // 十进制
// var leading_zero = 0123;  // 十进制带前导0
// var float_num = 123.456;  // 浮点数
// var hex_num = 0x1AF;      // 十六进制
// var hex_num2 = 0XFF;      // 十六进制（大写X）
// var oct_num = 0123;       // 八进制
// var oct_num2 = 077;       // 八进制
// // @@@ ~~
// "#;

    // 收集命令行参数
    let args: Vec<String> = std::env::args().collect();

    // 检查是否提供了文件名
    if args.len() < 2 {
        eprintln!("Usage: {} <filename>", args[0]);
        std::process::exit(1);
    }

    // println!("args: {:?}",args);
    let input = std::fs::read_to_string(&args[1]).unwrap();

    let mut lexer = Lexer::new(&input);
    let tokens = lexer.scan_tokens();


    for token in tokens {
        if let TokenType::INTEGER_CONST(x) = token.token_type {
            eprintln!("INTEGER_CONST {} at Line {}.", x as i32, token.line);
        } else {
            eprintln!("{:?} {} at Line {}.", token.token_type, token.lexeme, token.line);
        }
    }
}